home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
mail
/
mh
/
contrib
/
jpeek
/
showmult
< prev
next >
Wrap
Text File
|
1992-08-09
|
3KB
|
76 lines
#! /bin/sh
# $Header: /home/jerry/.bin/RCS/showmult,v 1.3 92/08/10 11:39:56 jerry mh_contrib $
### showmult - show multiple MH messages; pass as separate files to pager
### Usage (in MH profile): mhl: -moreproc showmult
##
## showmult FIXES AN IRRITATING MH show PROBLEM: BY DEFAULT, MH WITH mhl
## READS ALL THE MESSAGE FILES YOU WANT TO SEE AT ONCE AND PIPES THEM ALL
## TO YOUR PAGER (LIKE more). SO, YOU CAN'T ASK THE PAGER TO JUMP BACK
## AND FORTH WITHIN OR BETWEEN THE MESSAGES.
##
## showmult WORKS AROUND THIS BY FEEDING THE INDIVIDUAL FILES FROM THE
## mhl OUTPUT TO csplit -- SPLITTING THEM INTO SEPARATE FILES, THEN GIVING
## THE INDIVIDUAL FILES TO THE PAGER.
##
# ASSUMES THAT YOU'RE USING AN mhl FORMAT FILE THAT PUTS
# >>> foldername:msgnum
# AT THE START OF EVERY MESSAGE.
#
# NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
#
# USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
# PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
pager=${PAGER-less} # PROGRAM FOR PAGING THRU MESSAGES (DEFAULT IS "less")
# START SEPARATOR LINE LIKE THE ONE mhl SHOULD OUTPUT ($mhfolder IS FOLDER NAME)
sep=">>> ${mhfolder?}:"
# SET PREFIX (LIKE msg12345-01, msg12345-02) FOR FILES csplit MAKES IN /tmp:
msgs=msg$$-
temp=/tmp/SHOWMULT$$
umask 077 # MAKE ALL TEMP FILES PRIVATE
trap 'rm -f $temp ${msgs}*; exit' 0 1 2 15
cat > $temp # READ TEXT FROM mhl ON OUR STANDARD INPUT
# NUMBER OF SEPARATORS IN THE FILE = NUMBER OF MESSAGES.
numseps="`egrep -c \"^$sep\" $temp`"
case $? in
2) echo "`basename $0` quitting: egrep bombed." 1>&2
exit
;;
esac
case "$numseps" in
0) $pager $temp ;; # NO SEPARATOR IF LESS THAN 2 MESSAGES
1) # ONE SEPARATOR??? SHOW MESSAGE(S), THEN COMPLAIN:
$pager $temp
echo "`basename $0`: warning: wild message separator? Couldn't split that." 1>&2
;;
[2-9]|[1-9][0-9])
# BETWEEN 2 AND 99 MESSAGES. SHOW THEM.
# FIRST, GET REPETITION NUMBER FOR csplit:
repeats="`expr $numseps - 1`"
cd /tmp
# IF $sep HAS A "/" IN IT, ADD BACKSLASH(ES) TO KEEP csplit FROM PUKING:
case "$sep" in
*/*) sep="`echo \"$sep\" | sed 's@/@\\\\/@g'`" ;;
esac
if csplit -s -f $msgs $temp "/^$sep/" "{$repeats}"
then
rm -f ${msgs}00 # FIRST FILE IS ALWAYS EMPTY, SIGH
$pager ${msgs}*
else
echo "`basename $0`: quitting: problem with 'csplit'?" 1>&2
fi
;;
[1-9]*)
# csplit CAN'T HANDLE MORE THAN 100 MESSAGES AND WE CAN'T DO MORE THAN 99:
echo "`basename $0`: sorry, can't handle more than 99 messages." 1>&2
;;
*) echo 1>&2 "`basename $0`: quitting: wild 'egrep -c' output?:
$numseps"
;;
esac
exit # SHOULD REALLY SET A STATUS, I GUESS